GWTとDartでMessaging

メッセージングとは

  本来の定義とは違いますが、

  ここでは、"オブジェクト間の参照渡しなしで、相互に呼び合うことができる機構"として使っています。

  なにそれ凄い!! って思った方、居たら嬉しいです。

  言語的には、

     関数型言語、一部のオブジェクト指向言語で仕様として用意されています。

Scalaとか、
Objective-Cとか。 


GWTでメッセージング

  インストールと

  サンプル実行と

  メッセージングをやってみよう的な。



ダウンロード このへん

https://gitorious.org/messengersystem-gwt#more

DLして→importして、、って、コレからサクッとやってみます。 

ScreenCastにあるので、まあ解説がてら。

git clone git@gitorious.org:messengersystem-gwt/messengersystem-gwt.git

→Eclipseのプロジェクトなので、Eclipseにimport


実行
各インスタンスからWindow.alertがでますた。 インスタンスは保持してますが、メソッドは実行していない点に注目。

GWTMessengerでのメッセージング JSのWindow.postMessageを使い、インスタンス間のポインタ手動ではない構造を作ってます。

//何かしらオブジェクトを作ります

Foo foo = new Foo("A");

Foo foo2 = new Foo("B");

>> 

//オブジェクトの中に、メッセージの受け手兼送り手のMessngerGWTImplementsを書いときます。 

messenger = new MessengerGWTImplement(name, this);

//メッセージを送り合う関係を形成するように、(既にここからメッセージングで)親居ますか?ってメッセージを 

環境に投げます。この場合は、myselfって名前の人を親として設定します。

messenger.sInputParent("myself"); 

<<

//親設定のオブジェクトmyself から、Aにメッセージを送る messenger.call("A", "fooCommand",

messenger.tagValue("fooString", "fooValue"), messenger.tagValue("fooNumber", 100.0), messenger.tagValue("fooObject", fooObject)

);


!とどいた!!

みたいな。


Dartでメッセージング

インストールと

サンプル実行と

メッセージングをやってみよう的な。

インストール 簡単Ver

http://www.dartlang.org/docs/getting-started/editor/index-macos.html

めんどいVer(Before Oct 2011) 割愛


インストールして、"Something"ってプロジェクトを作ってみた。

page2image1072.png

プロジェクトを制作すると、 /Users/sassembla/dart 直下にフォルダが出来る。

page2image2056.png

サンプルでいい感じなのはコレ DLしたフォルダの中に、すでにサンプルが一式入ってます。 dart/samples

page3image504.png

Editorから、 File > Open > /dart/samples/sunflower/sunflower.dart dartでは、

.dartパッケージでアプリケーションの管理ファイルを構成している。 開いて実行するとこんな感じ

page3image1792.png

フィボナッチ級数的な感じで、ひまわりが書ける、とか。


本題、メッセージング
頑張って書いた、、んですが、 今朝見たらsampleにisolateってのがあってさ、、

/isolate
作成日:2011/11/9 by Google

page4image504.jpg

なんやてぇぇぇ

俺のミッション、終了のお知らせ。

/dart/samples/isolate

page4image1744.png

実行すると

page5image488.png

中身の解説 

ready()メソッドで、要素を設定してる。

//A,Bのisolate(独立スレッドを持つオブジェクト!)を作る createIsolate("A");
createIsolate("B");

createIsolateメソッドの中で、spawn()メソッドを使っています。

spawnとは、、、!!! 

Future<SendPort> spawn() {

return IsolateNatives.spawn(this, _isLight); 

}


Future型を返す、dart仕様で定義されている(=Runtimeがある)メソッドで、 isolate(独立したオブジェクト = スレッド)を実装します。

spawn()メソッドの特徴として、 ・実行するとコピーが作成され、コピーがスレッド化する

(実装見てませんが、たぶんまんまWebWorker作ってます) で、


//送る

ports[isolateName].call(message).receive( (var message, SendPort replyTo) { 

replyElement.text = message;

});


おしまい